题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285
#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
const int maxn = 500+50;
int n, m, x, y, in[maxn];
vector <int> E[maxn], v;
void init()
{
mem(in,0); v.clear();
for(int i = 1; i <= n; i++)
E[i].clear();
}
void topsort()
{
priority_queue<int, vector<int>, greater<int> >q;
for(int i = 1; i <= n; i++)
if(!in[i]) q.push(i);
while(!q.empty())
{
int now = q.top(); q.pop();
v.push_back(now);
for(int i = 0; i < E[now].size(); i++)
if(--in[E[now][i]] == 0) q.push(E[now][i]);
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
while(m--)
{
scanf("%d%d",&x,&y);
E[x].push_back(y); in[y]++;
}
topsort();
for(int i = 0; i < v.size(); i++)
printf("%d%c",v[i],i == v.size() - 1 ? '\n':' ');
}
}